package com.Atao.config;

import com.Atao.pojo.Category;
import com.Atao.service.CategoryService;
import com.Atao.utils.ThreadLocalUtil;
import com.Atao.utils.getIdUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

@Configuration
public class AiFunctionConfig {

    @Autowired
    private CategoryService categoryService;

    /**
     * 密封类，无需声明get，set方法和无参有参构造
     * 实现添加分类功能
     * 需要的参数为文章名称和文章别名
     */
    public record addCategory(String categoryName,String categoryAlias) {}

    /**
     * Function的第一个参数是传入的数据，第二个参数是输出的数据
     */
    @Bean
    @Description("处理新增文章分类")
    public Function<addCategory,String> addCategoryImpl() {
        return addCategory -> {
            //创建一个文章分类对象
            Category category = new Category();
            category.setCategoryName(addCategory.categoryName());
            category.setCategoryAlias(addCategory.categoryAlias());
            // 调用增加文章分类的方法
            categoryService.add(category);

            return "添加文章分类成功";
        };
    }

    /**
     * 密封类，无需声明get，set方法和无参有参构造
     * 实现查询文章分类功能
     */
    public record CategoryList() {}

    @Bean
    @Description("查询当前的文章分类，查看我当前有哪些文章分类")
    public Function<CategoryList,List<String>> categoryListImpl() {
        return CategoryList -> {
            List<Category> categoryList = categoryService.list();
            List<String> categoryInfo = new ArrayList<>();
            int i = 1;
            for (Category category : categoryList){
                categoryInfo.add("第"+(i++)+"个分类"+"分类名称为"+category.getCategoryName()+"，分类别名为"+category.getCategoryAlias());
            }
            return categoryInfo;
        };
    }


    /**
     * 密封类，无需声明get，set方法和无参有参构造
     * 实现删除文章分类功能
     */
    public record DeleteCategory(String categoryName) {}

    @Bean
    @Description("删除文章分类")
    public Function<DeleteCategory,String> deleteCategoryImpl() {
        return DeleteCategory -> {
            categoryService.delete2(DeleteCategory.categoryName());
            return "删除名字为"+DeleteCategory.categoryName()+"的文章分类成功！";
        };
    }

    /**
     * 密封类，无需声明get，set方法和无参有参构造
     * 实现编辑文章分类功能
     */
    public record UpdateCategory(String categoryName,String categoryAlias) {}

    @Bean
    @Description("修改或编辑文章分类")
    public Function<UpdateCategory,String> updateCategoryImpl() {
        return UpdateCategory -> {
            Category category = new Category();
            category.setId(categoryService.getIdByName(UpdateCategory.categoryName()));
            category.setCategoryName(UpdateCategory.categoryName());
            category.setCategoryAlias(UpdateCategory.categoryAlias());
            categoryService.update(category);
            return "修改成功，名字从原来的{根据历史消息记录填写}修改为了"+UpdateCategory.categoryName()+"，别名从原来的{根据历史消息记录填写}修改为了"+UpdateCategory.categoryAlias();
        };
    }
}